const router = require('koa-router')()
const { 
    isExist, 
    register, 
    login, 
    deleteCurUser, 
    changeInfo,
    changePassword,
    logout,
    bindOpenId,
    sendMessage
} = require('../../controller/user')
const { loginCheck } = require('../../middlewares/loginChecks')
const { genValidator } = require('../../middlewares/validator')
const { isTest } = require('../../utils/env')
const userValidate = require('../../validator/user')
router.prefix('/api/user')

// 注册路由
router.post('/register',genValidator(userValidate), async (ctx, next) => {
    const { userName, password, gender } = ctx.request.body
    ctx.body = await register({userName, password, gender})
})

// 用户名是否存在
router.post('/isExist', async (ctx, next) => {
    const { userName } = ctx.request.body
    // controller
    ctx.body = await isExist(userName)
})

// 用户登录
router.post('/login', async (ctx, next) => {
    const { userName, password } = ctx.request.body
    let res = await login(ctx, userName, password)
    ctx.body = res
})

// 删除
router.post('/delete', loginCheck, async (ctx, next) => {
    if(isTest) {
        // 测试环境下, 测试账号登录之后,删除自己
        const { userName } = ctx.session.userInfo
        // 调用controller
        ctx.body = await deleteCurUser(userName)
    }
})

// 修改个人信息
router.patch('/changeInfo', loginCheck, genValidator(userValidate), async (ctx, next) => {
    const { nickName, city, picture } = ctx.request.body
    ctx.body = await changeInfo(ctx, { nickName, city, picture } )
})

// 修改密码
router.patch('/changePassword', loginCheck, genValidator(userValidate), async (ctx, next) => {
    const { password, newPassword } = ctx.request.body
    const { userName } = ctx.session.userInfo
    ctx.body = await changePassword( userName, password, newPassword )
})

// 退出登录
router.post('/logout', loginCheck, async (ctx, next) => {
    ctx.body = await logout(ctx)
})

// 绑定openid
router.post('/bindopenid', loginCheck, async (ctx, next) => {
    const { code } = ctx.request.body
    ctx.body = await bindOpenId(ctx, code)
})

// 订阅消息
router.post('/sendMessage', loginCheck, async (ctx, next) => {
    const { tmplId }  = ctx.request.body
    ctx.body = await sendMessage(ctx, tmplId)
})

module.exports = router
